001 /* 002 * Copyright 2005 Stephen J. McConnell. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 013 * implied. 014 * 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 019 package net.dpml.lang; 020 021 /** 022 * Classoader category enumeration. 023 * @author <a href="http://www.dpml.net">Digital Product Meta Library</a> 024 * @version 1.0.1 025 */ 026 public final class Category extends ValuedEnum 027 { 028 static final long serialVersionUID = 1L; 029 030 /** 031 * Undefined category. 032 */ 033 public static final Category UNDEFINED = new Category( "undefined", -1 ); 034 035 /** 036 * System category. 037 */ 038 public static final Category SYSTEM = new Category( "system", 0 ); 039 040 /** 041 * API category. 042 */ 043 public static final Category PUBLIC = new Category( "public", 1 ); 044 045 /** 046 * SPI category. 047 */ 048 public static final Category PROTECTED = new Category( "protected", 2 ); 049 050 /** 051 * Implementation category. 052 */ 053 public static final Category PRIVATE = new Category( "private", 3 ); 054 055 /** 056 * Array of scope enumeration values. 057 */ 058 private static final Category[] ENUM_VALUES = 059 new Category[] 060 { 061 SYSTEM, 062 PUBLIC, 063 PROTECTED, 064 PRIVATE, 065 UNDEFINED 066 }; 067 068 /** 069 * Returns an array of activation enum values. 070 * @return the activation policies array 071 */ 072 public static Category[] values() 073 { 074 return ENUM_VALUES; 075 } 076 077 /** 078 * Internal constructor. 079 * @param label the enumeration label. 080 * @param index the enumeration index. 081 */ 082 private Category( String label, int index ) 083 { 084 super( label, index ); 085 } 086 087 /** 088 * Return a string representation of the category. 089 * @return the category name in uppercase 090 */ 091 public String toString() 092 { 093 return getName().toUpperCase(); 094 } 095 096 /** 097 * Create a category by parsing the supplied value. 098 * @param value the category name 099 * @return the corresponding category 100 * @exception IllegalArgumentException if the value is not recognized 101 */ 102 public static Category parse( int value ) throws IllegalArgumentException 103 { 104 if( SYSTEM.getValue() == value ) 105 { 106 return SYSTEM; 107 } 108 else if( PUBLIC.getValue() == value ) 109 { 110 return PUBLIC; 111 } 112 else if( PROTECTED.getValue() == value ) 113 { 114 return PROTECTED; 115 } 116 else if( PRIVATE.getValue() == value ) 117 { 118 return PRIVATE; 119 } 120 else if( UNDEFINED.getValue() == value ) 121 { 122 return UNDEFINED; 123 } 124 else 125 { 126 final String error = 127 "Unrecognized category value [" + value + "]"; 128 throw new IllegalArgumentException( error ); 129 } 130 } 131 132 /** 133 * Create a category by parsing the supplied name. 134 * @param value the category name 135 * @return the corresponding category 136 * @exception IllegalArgumentException if the value is not recognized 137 */ 138 public static Category parse( String value ) throws IllegalArgumentException 139 { 140 if( value.equalsIgnoreCase( "system" ) ) 141 { 142 return SYSTEM; 143 } 144 else if( value.equalsIgnoreCase( "public" ) ) 145 { 146 return PUBLIC; 147 } 148 else if( value.equalsIgnoreCase( "protected" ) ) 149 { 150 return PROTECTED; 151 } 152 else if( value.equalsIgnoreCase( "private" ) ) 153 { 154 return PRIVATE; 155 } 156 else if( value.equalsIgnoreCase( "undefined" ) ) 157 { 158 return UNDEFINED; 159 } 160 else 161 { 162 final String error = 163 "Unrecognized category argument [" + value + "]"; 164 throw new IllegalArgumentException( error ); 165 } 166 } 167 } 168